package org.example.leetcode.topic1;


/**
 * <a href="https://leetcode.cn/problems/merge-sorted-array/?envType=study-plan-v2&envId=top-interview-150">合并两个有序数组</a>
 */
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 边界考虑
        if(m == 0) {
            copy(nums1, nums2);
            return;
        }
        if(n == 0) {
            return;
        }
        // 计算结果
        int[] result = new int[m + n]; // 结果
        int index1=0, index2 = 0; // 两个指针
        for(int i = 0; i < m + n; i++) {
            // 边界考虑
            if(index1 >= m){
                result[i] = nums2[index2];
                index2++;
                continue;
            }
            if(index2 >= n) {
                result[i] = nums1[index1];
                index1++;
                continue;
            }
            // 合并
            if(nums1[index1] <= nums2[index2]){
                result[i] = nums1[index1];
                index1++;
            }else {
                result[i] = nums2[index2];
                index2++;
            }
        }
        // 结果赋值到nums1
        copy(nums1, result);
    }

    /**
     * nums2拷贝到nums1`
     */
    private void copy(int[] nums1, int[] nums2){
        System.arraycopy(nums2, 0, nums1, 0, nums1.length);
    }
}
